package com.terry.test3;

import java.util.Scanner;

/**
 *
 * 【没有回文串】
 *
 * 回文串的定义：正读和反读都一样的字符串现在已经存在一个不包含回文串的字符串，字符串的字符都是在英语字母的前N个,且字符串不包含任何长度大于等于2的回文串；请找出下一个字典序的不包含回文串的、字符都是在英语字母的前N个、且长度相同的字符串。如果不存在，请输出NO。
 *
 * 输入描述：
 *
 * 输入包括两行。
 *
 * 第一行有一个整数:N（1<=N<=26），表示字符串的每个字符范围都是前N的英语字母。
 *
 * 第二行输入一个字符串（输入长度<=10000），输入保证这个字符串是合法的并且没有包含回文串。
 *
 * 输出描述：
 *
 * 输出下一个字典序的不包含回文串的、字符都是在英语字母的前N个、且长度相同的字符串；如果不存在,请输出”NO”。
 *
 * 示例1：
 *
 * 输入
 *
 * 3
 *
 * cba
 *
 * 输出
 *
 * NO
 *
 *
 * https://blog.csdn.net/zhizhengguan/article/details/126824190
 *
 * @author 小八
 * @date 2023年02月11日9:04
 */
public class Title22 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            Integer len = Integer.parseInt(in.nextLine());
            char maxC = (char)((len-1)+(int)'a');
            String line = in.nextLine();
            int n = line.length();
            char[] arr = line.toCharArray();
            int[] change = new int[line.length()];
            int index = arr.length-1;
            while(index>=0 && index<n){
               char c ;
               if( change[index]>0){
                  c = (char)(change[index]+1);
               }else if( change[index]<0){
                   c = 'a';
               }else{
                   c = arr[index];
                   if(c==maxC){
                       change[index--] = -1;
                       continue;
                   }else{
                       c = (char)(c + 1);
                   }
               }
               change[index] = c ;
               if((index ==1 && (change[index-1]!=0?c != change[index-1]:c != arr[index-1])) || (index >=2 &&  (change[index-1]!=0?c != change[index-1]:c != arr[index-1]) &&  (change[index-2]!=0?c != change[index-2]:c != arr[index-2])) || (index == 0 && c>arr[index])){
                   if(index == n){
                       break;
                   }else{
                       index ++ ;
                   }
               }else{
                   if(c==maxC){
                       change[index--] = -1;
                   }
               }
            }

            if(index == n) {
                StringBuilder builder = new StringBuilder();
                for (int i = 0; i < change.length; i++) {
                    if (change[i] > 0) {
                        builder.append((char) change[i]);
                    } else {
                        builder.append(arr[i]);
                    }
                }
                System.out.println(builder);
            }else{
                System.out.println("NO");
            }
        }
    }
}
